import axios from 'axios'
//单独引入 Message组件
import {Message} from 'element-ui'
//导入router
import router from "@/router";

//响应拦截器(统一的响应拦截器，统一处理拦截请求)
axios.interceptors.response.use(data => {
    /**
     * 处理失败数据（前端前端返回正常数据）
     */
    if(data.status && data.status ==200 && data.data.status == 500){
        Message.error({message: data.data.msg})//弹出错误信息
        return ;
    }
    if(data.data.msg){
        Message.success({message: data.data.msg})//只要后端传到前端信息，那弹出对应消息
    }
    return data.data;//返回服务器的JSON数据
},error => {
    /**
     * 处理
     */
    if(error.response.status == 504 || error.response.status == 404){
        Message.error({message: "服务器被吃了，( ╯□╰ )"})
    } else if(error.response.status == 403){
        Message.error({message: "权限不足，请求联系管理~爸爸"})

    } else if(error.response.status == 401){
        Message.error({message: "暂未登录，请登陆后操作"})
        router.replace("/")//如果账户没有登录，那么就路由到根目录下的登录界面，
                                      // 并且提示，暂未登录。
    } else {
        if (error.response.data.msg){
            Message.error({message:error.response.data.msg})
        } else {
            Message.error({message:"未知错误"})
        }
    }
    return;
})


/* 封装请求部分 */
//封装请求的路径
let base =''

//post方式传递普通的数据
export const postKeyValueRequest = (url,params) => {
    return axios({
        method: 'post',
        url: `${base}${url}`,
        data: params,
        //传输数据前做格式处理
        transformRequest: [function (data){
            let ret= '';
            for (let dataKey in data) {
                console.log(dataKey )
                ret+=encodeURIComponent(dataKey)+"="+encodeURIComponent(data[dataKey]) +"&"
            }
            return ret;
        }],
        //自定义请求头
        headers: {
            "Content-Type": "application/x-www-form-urlencoded"
        }
    })
}

//Post传递JSON的请求方式
export const postRequest = (url,params) => {
    return axios ({
        method: 'post',
        url: `${base}${url}`,
        data: params
    })
}

//Put传递JSON的请求方式
export const putRequest = (url,params) => {
    return axios ({
        method: 'put',
        url: `${base}${url}`,
        data: params
    })
}

//get传递JSON的请求方式
export const getRequest = (url,params) => {
    return axios ({
        method: 'get',
        url: `${base}${url}`,
        data: params
    })
}

//delete
export const deleteRequest = (url,params) => {
    return axios ({
        method: 'delete',
        url: `${base}${url}`,
        data: params
    })
}
